package org.zing.proxy.test01;

/**
 * 代理对象 - 经纪人
 * 第一：包装要代理的目标对象，在代理类中包含要代理对象的引用
 * 第二：根据需求，在调用代理对象业务方法之前、之后扩展一些额外的功能
 *
 * @author zqx
 * @date 2024-04-21
 */
public class Agent implements Performance {
    /**
     * 第一：定义代理的目标对象 - 歌星
     */
    private final SingingStar singingStar = new SingingStar();

    /**
     * 第二：根据需求，在调用代理对象业务方法之前、之后扩展一些额外的功能
     *
     * @param song
     * @return
     */
    @Override
    public String sing(String song) {
        // 1.调用代理目标对象的核心功能之前做一些处理
        System.out.println("之前扩展：经纪人与客户谈合作，收取定金");
        // 2.调用代理目标对象的核心功能
        String result = singingStar.sing(song);
        // 3.调用代理目标对象的核心功能之后做一些处理
        System.out.println("之后扩展：做一些收尾工作");
        return result;
    }
}
